/*
 *Cola de prioridad que guardara los arboles RN
 * La prioridad es tomada en cuenta segun la posicion del arreglo
 * posicion 0 es la de mayor priridad
 */

package Estructuras;

/**
 *
 * Luis E Sosa S
 */
public class PriorityQueue {

  int tamano= 100; //representa las clases del scheduling
  private Tree_RB<Object, Object> priorityQueue[];
  



  public PriorityQueue() {
    //Crea una cola de prioridad de tamano tamanoColaPrioridad
    priorityQueue = new Tree_RB [tamano];
  }




//tamano de la cola de prioridad
  public PriorityQueue(int tamano) {
    this.tamano = tamano;
    //Crea una cola de prioridad de tamano tamanoColaPrioridad
    priorityQueue = new Tree_RB [tamano];
    
  }


  

/*Funcion que es llamada cuando un proceso pasa a estado runnable.
 * Esta coloca el proceso dentro del arbol rojo negro e incrementa
 * la nr_running variable
 */
  public boolean EnqueueTask(Tree_RB arbol,int prioridad){
    //Si el numero esta dentro de la prioridad
    if(prioridad<tamano && prioridad>=0){
      //si no se ha agregado ningun elemento al arbol
       if(priorityQueue[prioridad] == null){
          priorityQueue[prioridad] = arbol;
          return true;
       }//si ya existe un elemento en el arbol
       else{
         System.out.println("Ya existe un arbol en priorityQueue");
         System.out.println("Arbol no agregado");
         return false;
       }
    }
    //Si el numero no esta dentro de la prioridad
    else{
      System.out.println("Prioridad invalida");
      return false;
    }
  }

  
//Elimina un elemento de la cola de prioridad
  public boolean eliminar(int prioridad){
    priorityQueue[prioridad]= null;
    return true;
  }



//retorna el arbol ubicado en la posicion prioridad
//o null si no existe el arbol
  public Tree_RB obtenerArbol(int prioridad){
    return priorityQueue[prioridad];

  }



}
